<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="../react18/react.development.js"></script>
    <script src="../react18/react-dom.development.js"></script>
    <script src="../react18/babel.min.js"></script>
  </head>
  <body>
    <button id="btn">按钮</button>
    <div id="app"></div>
    <script type="text/babel">
      const oBtn = document.getElementById("btn");

      //创建一个原始虚拟DOM
      const vDom = (
        <div>
          <div>天气预报</div>
          <p>今日小雨</p>
        </div>
      );

      //创建一个根容器
      const root = ReactDOM.createRoot(document.getElementById("app"));
      //把原始的虚拟DOM渲染在根容器中
      root.render(vDom);

      //给按钮绑定点击事件,当点击按钮的时候,设置一个新的虚拟DOM,并且重新渲染
      oBtn.onclick = function () {
        /* 
          diff比较策略1(tree diff):
            * 两棵树只对同一层级节点进行比较，只要该节点不存在了，那么该节点与其所有子节点会被完全删除,不在进行进一步比较。
            * React diff 只考虑同层次的节点位置变换,若为跨层级的位置变化，则是创建节点和删除节点的操作。即在新位置上重新创建相同的节点，而删除原位置的节点。
            * React 官方建议不要进行DOM节点的跨层级操作
        
        
        */
        /* const vDom = (
          <div>
            <div>天气预报</div>
          </div>
        ); */

        const vDom = (
          <div>
            <div>
              天气预报
              <p>今日晴天</p>
            </div>
          </div>
        );

        root.render(vDom);
      };
    </script>
  </body>
</html>
